home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / madtrb1.arc / TSIPP1.DOC < prev    next >
Text File  |  1986-03-04  |  41KB  |  989 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                              USER'S MANUAL
  11.  
  12.  
  13.  
  14.  
  15.  
  16.           ------------------------------------------------------
  17.  
  18.                  TURBO SCREEN INPUT PRE-PROCESSOR TOOLKIT
  19.  
  20.                              Version  1.07
  21.  
  22.           ------------------------------------------------------
  23.  
  24.  
  25.  
  26.  
  27.                        Written by Chris E. Maeder
  28.                               March, 1986
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. This toolkit is PUBLIC DOMAIN.  It is being distributed with the intended
  38. purpose of other Turbo Pascal users implementing all or part of it into their
  39. programs.  It is free to anyone that wishes to use it with the hope that they
  40. also will contribute programs to other Turbo users.
  41.  
  42. This toolkit is being continually updated.  If you would like updates of this
  43. toolkit or other free Turbo Pascal software please feel free to contact me
  44. through:
  45.  
  46.                    Madison IBM-PC Users' Group
  47.                    Turbo Pascal Special Interest Group
  48.                    P.O. Box 2598
  49.                    Madison, WI  53701-2598
  50.  
  51. I would also like to invite you to join our users' group.  We are an extremely
  52. active Turbo Pascal group and meet one night every month.  If you have any
  53. urgent questions you can reach me at my home, at (608) 251-4967.
  54.  
  55. Happy computing!!
  56.  
  57.  
  58.  
  59.  
  60.  
  61.                             TABLE OF CONTENTS
  62.                             -----------------
  63.  
  64.  
  65.  
  66.      Introduction...............................................1
  67.      Overview...................................................1
  68.      Software Engineering.......................................6
  69.      Shell Environments.........................................9
  70.      Notation..................................................10
  71.      Description of Toolkit Subprogram Files...................11
  72.      Description of Toolkit Utility Files......................16
  73.      Description of Files Used in the Example Application......17
  74.      Program Control...........................................19
  75.      Child Program Execution...................................20
  76.      Description of Screen Templates...........................20
  77.      Screen Template Generators................................26
  78.      Pre-Processor Alterations.................................28
  79.      Miscellaneous Notes.......................................33
  80.      Final Notes...............................................33
  81.  
  82.  
  83.  
  84.                                   Page 1
  85.  
  86.  
  87.  
  88.  
  89. I. INTRODUCTION
  90.  
  91.  
  92. I am a structural engineer.  I found that every time I wrote another
  93. engineering program I would spend a week or two on the input routines.  I
  94. thought that if I were to write a generalized input pre-processor that I could
  95. use over and over again then I could spend more time on writing engineering
  96. programs and not rehashing through the same input routines for each new program
  97. I wrote.  This input pre-processor toolkit is the current result of my work.
  98. The example application in which the pre-processor is set up for is a composite
  99. beam analysis and design program that I am presently working on.
  100.  
  101.  
  102.  
  103.  
  104. II. OVERVIEW
  105.  
  106.  
  107. Good interactive input/output (I/O) routines make a program fun to use and also
  108. make a program reliable.  For example, the user should not have to worry
  109. about crashing a program by making a simple typing mistake.  Although it is
  110. impossible for the input routines to detect all input errors, careful input
  111. routines should catch the more common ones.  A good strategy for a
  112. "user-friendly program" is to detect input errors as soon as possible and make
  113. it easy for the user to the correct mistakes.
  114.  
  115. An input pre-processor helps a program become "user-friendly" by taking care of
  116. of all the input handling between the user and a application program.
  117.  
  118. A input pre-processor can be thought of as one component of an application
  119. program.  See the following diagram.
  120.  
  121.  
  122.  
  123.                                   Page 2
  124.  
  125.  
  126.  
  127.  
  128.                DIAGRAM OF A SIMPLIFIED APPLICATION PROGRAM
  129.  
  130.  
  131.         _________________________________________________________
  132.        |                                                         |
  133.        |                      PROGRAM SHELL                      |
  134.        |_________________________________________________________|
  135.               ^                     ^                     ^
  136.               |                     |                     |
  137.               |                     |                     |
  138.               |                     |                     |
  139.         ______v______         ______v______         ______v______
  140.        |             |       |             |       |             |
  141.        |  INPUT      |       |   CORE      |       |  OUTPUT     |
  142.        |  PRE-       |       |   PROGRAM   |       |  POST-      |
  143.        |  PROCESSOR  |       |             |       |  PROCESSOR  |
  144.        |_____________|       |_____________|       |_____________|
  145.               ^                    ^ |                    ^
  146.               |                    | |                    |
  147.               |                    | |                    |
  148.               |                    | |                    |
  149.             __v_____               | |                  __v_____
  150.           _|______  |              | |                _|______  |
  151.         _|______  | |              | |              _|______  | |
  152.        | INPUT  | | |--------------   ------------>| OUTPUT | | |
  153.        | DATA   | |_|                              | DATA   | |_|
  154.        | FILES  |_|                                | FILES  |_|
  155.        |________|                                  |________|
  156.  
  157.  
  158. Observe from the above diagram that the input pre-processor is the visual
  159. interface between the user and the core program.  The input pre-processor is
  160. used by the user to input data into an application core program.  The core
  161. program then executes on that input data.  A post-processor is used by the user
  162. to view the results of the core program's output.  I should note that I am
  163. presently working on a post-processor for this toolkit.
  164.  
  165.  
  166.  
  167.                                   Page 3
  168.  
  169.  
  170.  
  171.  
  172. I have listed below some of the advantages in using an input pre-processor in
  173. an application program like that depicted in the previous diagram:
  174.  
  175.  
  176.     1.  To start with, breaking up a program into smaller and easier to
  177.         understand subprograms is usually the single most important
  178.         contribution to a program's quality.  By using a separate subprogram to
  179.         handle user input you then separate the application program into
  180.         smaller, more manageable chunks.  You will find that by separating the
  181.         user interface from the actual core program, the entire application
  182.         program begins to become more modular.
  183.  
  184.  
  185.     2.  You will discover that your application program becomes more portable
  186.         once you have separated the user interface from the actual core
  187.         program.  By "portable" I mean that the program can easily be made to
  188.         run on a variety of systems.  The core program can usually be
  189.         transferred to another computer system quite easily.  The user
  190.         interface usually cannot be easily transferred, because of the machine
  191.         specific routines that are generally used.
  192.  
  193.         Due to the rapid advancements in technology, today's personal computers
  194.         will no doubt be obsolete within a few years.  Thus a "portable"
  195.         program will have a better chance of running on future personal
  196.         computers as well as those of today, as opposed to a very machine
  197.         specific program.  Simply by separating the user interface from the
  198.         core program one then needs to write a new user interface, not an
  199.         entirely new program, when transferring his program to a new computer
  200.         system.
  201.  
  202.  
  203.     3.  Input error checking is easily implemented using an input pre-
  204.         processor.  More specifically, this particular pre-processor can
  205.         check for:
  206.  
  207.             a. Specific character types for an entry (i.e., positive integer,
  208.                positive real, etc.).
  209.  
  210.             b. Entry is within specific defined boundaries or the entry is one
  211.                of a few select choices.
  212.  
  213.             c. Newly entered boundary conditions do not corrupt previously
  214.                entered data.
  215.  
  216.  
  217.  
  218.                                   Page 4
  219.  
  220.  
  221.  
  222.  
  223.     4.  Probably most important, an input pre-processor makes the application
  224.         program extremely user friendly and fun to use.  The user does not have
  225.         to be concerned about crashing the program if he enters a bad piece
  226.         of data, the input pre-processor will catch it for him and allow him
  227.         to return to the bad entry and change it without having to restart the
  228.         program.
  229.  
  230.  
  231.     5.  Finally, a input pre-processor can furnish a visual interpretation of
  232.         the user's entered data.  For example, a bar chart or graph could be
  233.         displayed by the input pre-processor as the user inputs data.  This
  234.         allows the user some visual feedback as he enters his data, helping him
  235.         to spot input errors, trends, etc.
  236.  
  237.  
  238. What makes this pre-processor so powerful is that it is written and structured
  239. so that it can be quickly altered for a completely different application
  240. program.  A few constants require changing, the screen template files have to
  241. be designed and written, and before you know it you have a beautiful input
  242. pre-processor for your own application program.
  243.  
  244.  
  245.  
  246.                                   Page 5
  247.  
  248.  
  249.  
  250.  
  251. To help give you an idea how this program is structured I have shown in the
  252. diagram below one possible configuration for this input pre-processor in an
  253. example application.
  254.  
  255.  
  256.  
  257.         DIAGRAM OF A TYPICAL CONFIGURATION OF THE INPUT PRE-PROCESSOR
  258.  
  259.  
  260.   ___________________________________________________________________________
  261.  |                                                                           |
  262.  |                      MAIN INPUT PRE-PROCESSOR PROGRAM                     |
  263.  |___________________________________________________________________________|
  264.       ^                             ^                ^
  265.       |                             |                |
  266.       |                             |                |
  267.       |                             |                |
  268.       |          _________      ____v_____      _____v____          _________
  269.       |        _|_______  |    |          |    |          |       _|_______  |
  270.       |      _|_______  | |    | INPUT    |    | MENU     |     _|_______  | |
  271.       |     |INPUT    | | |--->| PAGE     |<-->| SUB-     |<---|MENU     | | |
  272.       |     |PAGE     | |_|    | SUB-     |    | PROGRAM  |    |TEMPLATES| |_|
  273.       |     |TEMPLATES|_|      | PROGRAM  |    |          |    |         |_|
  274.       |     |_________|        |__________|    |__________|    |_________|
  275.       |                           ^ ^ ^
  276.       |                           | | |
  277.       |               ------------  |  -------------
  278.       |              |              |               |
  279.       |         _____v____      ____v_____      ____v_____
  280.       |        |          |    |          |    |          |
  281.       |        | SCREEN   |    | ERROR    |    | FILE     |
  282.       |        | I/O      |    | CHECKING |    | I/O      |
  283.       |        | SUB-     |    | SUB-     |    | SUB-     |
  284.       |        | PROGRAM  |    | PROGRAM  |    | PROGRAM  |
  285.       |        |__________|    |__________|    |__________|
  286.       |                                             ^
  287.       |                                             |
  288.       |                                             |
  289.       |                                             |
  290.   ____v_____                                      __v_____
  291.  |          |                                   _|______  |
  292.  | INITIL-  |                                 _|______  | |
  293.  | IZATION  |                                | INPUT  | | |
  294.  | SUB-     |                                | DATA   | |_|
  295.  | PROGRAM  |                                | FILES  |_|
  296.  |__________|                                |________|
  297.  
  298.  
  299.  
  300.                                   Page 6
  301.  
  302.  
  303.  
  304.  
  305. Notice in the previous diagram this input pre-processor toolkit is broken down
  306. into subprogram files.  These subprogram files are mainly made up with program
  307. modules to afford program modularity.
  308.  
  309.  
  310.  
  311.  
  312. III. SOFTWARE ENGINEERING
  313.  
  314.  
  315. Let me talk a little bit about program modules and why they are so useful in
  316. writing code for a large program.
  317.  
  318. One can think of a module as a type of black box, it does one thing and one
  319. thing alone and does it very well and everything it requires is contained
  320. within it.
  321.  
  322. A module should be a small, single purpose unit within the program, with a
  323. narrow interface to the rest of the program.  I say this because it is much
  324. easier to understand and change a small, single purpose module than a large,
  325. multipurpose, widely-interfaced one.  Also, a should module hide its design
  326. from the rest of the program, so that only the module is affected if the
  327. programmer decides to revise the module's design.
  328.  
  329. There is only one way to access a given module and that is through it's header.
  330. A specific set of parameters are passed to a module and a specific set of
  331. output parameters are returned.  Note that functions and procedures within a
  332. module cannot be accessed externally.  Also, modules allow the use of internal
  333. global variables within that particular module alone.
  334.  
  335.  
  336.  
  337.                                   Page 7
  338.  
  339.  
  340.  
  341.  
  342. A module is constructed by encapsuling all the procedures, functions, and
  343. internal global variables for that module within one main procedure (using one
  344. lexical level).  See below diagram.
  345.  
  346.  
  347.                             EXAMPLE MODULE
  348.  
  349.  
  350.     Procedure DoItModule(    FirstParameter,
  351.                              SecondParameter,
  352.                          Var ThirdParameter:ParameterType);
  353.  
  354.     Var
  355.       InternalGlobalVar:VarType;
  356.  
  357.  
  358.         Function DoItQuick;
  359.  
  360.         Begin   { DoItQuick }
  361.            .
  362.            .
  363.            .
  364.         End;    { DoItQuick }
  365.  
  366.  
  367.         Procedure DoItGood;
  368.  
  369.         Begin   { DoItGood }
  370.            .
  371.            .
  372.            .
  373.         End;    { DoItGood }
  374.  
  375.  
  376.     Begin   { DoItModule }
  377.            .
  378.            .
  379.            .
  380.     End;    { DoItModule }
  381.  
  382.  
  383.  
  384.                                   Page 8
  385.  
  386.  
  387.  
  388.  
  389. Notice in the previous example that the module's input parameters were
  390. "FirstParameter", "SecondParameter", and "ThirdParameter".  Similarly, the
  391. module's output parameter was "ThirdParameter".  The above module has it own
  392. internal global variable called "InternalGlobalVar".  This variable is only
  393. active within the module and is global to all the functions and procedures
  394. within the module.  Observe also that the functions and procedures within the
  395. module can only be accessed when the module as a whole is accessed.
  396.  
  397. Modules offer some very nice advantages when writing code for a large program.
  398.  
  399.  
  400.     1.  First, modules help to minimize the amount of code the programmer needs
  401.         to understand at one given instant.  A module can be studied and
  402.         changed without examining and/or re-writing the rest of the program.
  403.         This is a great aid in debugging and modifying a program since once a
  404.         module is debugged it usually can be treated as a "given" while the
  405.         rest of the program is examined.
  406.  
  407.  
  408.     2.  One will find that many times major changes are necessary in a program
  409.         due to errors, changes in requirements, etc.  These changes can have a
  410.         widespread effect on the program if they were not anticipated ahead of
  411.         time in the original program design.  Thus we see that modularity helps
  412.         to limit the "rippling effect" through a program as other parts in the
  413.         main program change.
  414.  
  415.  
  416.     3.  Finally, modularity usually results in decreased programming time for
  417.         programs written later on.  Some modules often can be reused in a
  418.         number of programs, thereby preventing having to "re-invent the wheel".
  419.  
  420.  
  421. A word of wisdom--try to keep modules as flexible as possible so they will
  422. remain usable in a variety of situations, not just for the one for which they
  423. were first written for.
  424.  
  425. For those of you who are interested, we've been talking about one small area
  426. in the subject of software engineering, a new and very exciting computer
  427. science subject.
  428.  
  429.  
  430.  
  431.                                   Page 9
  432.  
  433.  
  434.  
  435.  
  436. IV. SHELL ENVIRONMENTS
  437.  
  438.  
  439. I would like you to note that you can use this pre-processor as part of a
  440. shell environment (like TopView without the multi-tasking capability).
  441.  
  442. This toolkit contains routines that allow this pre-processor to operate as
  443. part of a parent program written in Turbo Pascal, calling another program
  444. (written in a different language, i.e. C, Fortran, compiled Basic, etc.) as a
  445. child program.  Control is passed to the child program and then returned back
  446. to the Turbo program, (see the previous diagram of a simplified application
  447. program).  I will give an example.
  448.  
  449. There are many good, debugged structural analysis and design programs written
  450. in Fortran.  Usually though, the user interface in Fortran programs are pretty
  451. bad.  Thus, I could write a Turbo shell program (called the parent program)
  452. that incorporated this pre-processor and a post-processor (yet to be written),
  453. and a Fortran program.  I would then use the pre-processor in this shell
  454. environment to generate the proper input files for the Fortran program (called
  455. the child program) and then pass control to that Fortran program.  The user
  456. would be totally unaware that control was passed to a different program.
  457.  
  458. The Fortran program would then read the input file, execute on it, and write
  459. the output to a file.  Control would then be passed back to the Turbo program,
  460. specifically to the next line of Pascal code.  The post-processor might take
  461. over now and graphically display the Fortran program's results.  Thus there
  462. would never be any need to re-write the existing debugged Fortran program into
  463. Pascal.  One simply would have to be certain that the input file was written in
  464. the proper format for the Fortran program to read and what the Fortran output
  465. file format was for the post-processor to read.
  466.  
  467. One could also place several existing programs under the same shell
  468. environment, treating them all as "core programs", passing control back and
  469. forth between various core programs as deemed necessary.  Some sort a data
  470. management would probably be required for transferring the data in the proper
  471. format to the various core programs.
  472.  
  473.  
  474.  
  475.                                   Page 10
  476.  
  477.  
  478.  
  479.  
  480. V. NOTATION
  481.  
  482.  
  483. A few notes on my variable naming notation:
  484.  
  485.          "G_I" means General Input
  486.          "S_I" means Scrolling Input
  487.  
  488. All constants are in uppercase with underscore characters between words.  All
  489. variables, functions, and procedure names are in lower case with a capital
  490. letter at the start of each word within the name, with no underscore between
  491. words.  I recommend that you adopt a similar notation if you already haven't.
  492. It is very helpful to be able to look at your code and be able to tell what
  493. identifiers are constants.
  494.  
  495. A few notes on my file naming notation:
  496.  
  497.          "Col" means Color
  498.          "Doc" means Documentation
  499.          "Frm" means Form
  500.          "Gen" means Generator
  501.          "Inc" means Include File
  502.          "Mon" means Monochrome
  503.          "Pas" means Pascal
  504.          "Tpl" means Template
  505.          "Tsipp" means Turbo Screen Input Pre-Processor
  506.  
  507.  
  508.  
  509.                                   Page 11
  510.  
  511.  
  512.  
  513.  
  514. VI. DESCRIPTION OF TOOLKIT SUBPROGRAM FILES
  515.  
  516.  
  517. Below is an alphabetical list of the pre-processor subprogram include files you
  518. will find in this toolkit along with a short description on what each
  519. subprogram does.
  520.  
  521.  
  522.    File             Description
  523.    -----------      -----------------------------------------------------------
  524.  
  525.    Display.Inc      This include file contains a subprogram for displaying the
  526.                     input data in the scrolling input pages in a more
  527.                     meaningful way.  The example application of the input pre-
  528.                     processor is set-up so that a model of the user's entered
  529.                     beam load is displayed.  You may want to implement a
  530.                     similar type of display to represent your user's entered
  531.                     data.
  532.  
  533.                     For example, you may want to display a graph, bar chart,
  534.                     etc.  I wrote this subprogram so that the user could see a
  535.                     visual representation of the input data as he was
  536.                     entering it.  This enables the user to be able to spot
  537.                     input errors more easily, trends, etc.  This subprogram
  538.                     file tries to help to reduce the possibility of "Garbage
  539.                     In = Garbage Out".
  540.  
  541.  
  542.    Error.Inc        This include file contains the input error checking
  543.                     subprogram.  This subprogram contains two modules which are
  544.                     called after a user has entered a data entry.  One module
  545.                     is for input error checking for the general input
  546.                     subprogram, the other is for input error checking for the
  547.                     scrolling input subprogram.  Both of these two modules can
  548.                     determine if a specific input data entry is within the
  549.                     prescribed bounds allowed or is one of a few predetermined
  550.                     choices.  These modules also make certain that newly
  551.                     entered boundary conditions do not corrupt previously
  552.                     entered data.  This subprogram file tries to prevent
  553.                     "Garbage In = Garbage Out".  You may want to write similar
  554.                     modules for your application program to check the user's
  555.                     input data as it is entered.
  556.  
  557.                     Note that specific error character type checking is
  558.                     performed in "G_Input.Inc" and "S_Input2.Inc", not in this
  559.                     subprogram.  It is always good strategy to check for input
  560.                     errors as soon as possible.  That is why character type
  561.                     checking is linked with the screen templates and general
  562.                     input subprogram or scrolling input subprogram.
  563.  
  564.  
  565.  
  566.                                   Page 12
  567.  
  568.  
  569.  
  570.  
  571.    Execute.Inc      This include file contains the subprogram that allows you
  572.                     to run child programs directly from Turbo Pascal, get the
  573.                     return codes from DOS when those child programs terminate,
  574.                     and be able to temporarily exit your Turbo program to issue
  575.                     DOS commands.
  576.  
  577.                     One could write a Turbo shell program to execute other
  578.                     programs using these routines, thereby relieving the user
  579.                     from having to deal with DOS.  These routines are very
  580.                     powerful for a large application program, especially if you
  581.                     want to take existing programs and get them running all
  582.                     under the same program shell.
  583.  
  584.  
  585.    File.Inc         This include file contains the file I/O subprogram.  This
  586.                     subprogram contains three modules of interest.
  587.  
  588.                     One module takes care of the reading of previously prepared
  589.                     input data files.
  590.  
  591.                     The second module takes care of the writing of the input
  592.                     data to a data file.
  593.  
  594.                     The input pre-processor was setup to allow the user to work
  595.                     on his input data for a while, store it under a file name
  596.                     and come back to it later to make changes, etc.
  597.  
  598.                     You may, for example, want the input data to be written in
  599.                     a specific format (such as if you wanted the input file to
  600.                     be read by a Fortran program).  In this subprogram you
  601.                     should write a small procedure to write a temporary ASCII
  602.                     text file with the proper format for the core program
  603.                     to read and execute on.  This file should be separate of
  604.                     the user's input data file.
  605.  
  606.                     The last module controls the displaying and listing of the
  607.                     disk directory.  This allows the user to query the input
  608.                     pre-processor for a list of previously prepared input data
  609.                     files.
  610.  
  611.                     One final note, the user is not allowed to specify the
  612.                     input data file name extension.  This was done to simplify
  613.                     the file I/O routines for the user.  That way the user does
  614.                     not have to guess what files are input files since the
  615.                     program will only recognize those data files with the
  616.                     proper extension.  The pre-processor will only read, write,
  617.                     or display input data files with the same file name
  618.                     extension.
  619.  
  620.  
  621.  
  622.                                   Page 13
  623.  
  624.  
  625.  
  626.  
  627.    Init.Inc         This include file contains the initialization subprogram
  628.                     for the input pre-processor.  This subprogram senses what
  629.                     type of monitor and video card is installed, controls the
  630.                     reading of the screen template files, screen page files,
  631.                     initializes all data entries and variables, and sets up the
  632.                     proper screen colors for the type of monitor being used.
  633.  
  634.  
  635.    G_Input.Inc      This include file contains the general input page
  636.                     subprogram.  This subprogram controls the entering of data
  637.                     into the general input pages. This subprogram will support
  638.                     as many general input pages as you require.  Notice that
  639.                     there is only one general input page in the example
  640.                     application of the input pre-processor.
  641.  
  642.                     This subprogram checks data entered by the user to make
  643.                     certain it is of the type defined in the screen template
  644.                     for that entry.  For example, if only a positive integer is
  645.                     to be allowed for a particular entry, only that data type
  646.                     will be allowed to be entered from the keyboard.  All other
  647.                     characters will be discarded with an error sounded also.
  648.  
  649.                     Entry descriptors (or prompts) are easily added, deleted,
  650.                     or altered using "G_I_Tpl.Gen" to generate or change a
  651.                     screen template.  Descriptor locations, entry locations,
  652.                     entry types, etc. are set up in the template file and the
  653.                     general input page subprogram then abides by the template
  654.                     you have defined.
  655.  
  656.                     Global constants, types, and variables specific to this
  657.                     subprogram are also defined within this file.
  658.  
  659.  
  660.    Menu.Inc         This include file contains the menu page subprogram.  This
  661.                     subprogram controls the display and handling of menus.
  662.                     This subprogram's routines allow you to manage as many
  663.                     menus as your particular application requires.  Notice that
  664.                     there is only one menu page in the example application of
  665.                     the input pre-processor.
  666.  
  667.                     You may, for example, want to implement a menu to allow the
  668.                     user to transfer control to another part of the application
  669.                     program or to an entirely different program (as what could
  670.                     be done with the overlay, chain, or execute statement, or
  671.                     with the included subprogram "Execute.Inc").
  672.  
  673.  
  674.  
  675.                                   Page 14
  676.  
  677.  
  678.  
  679.  
  680.                     Menu prompts are easily added, deleted, or altered using
  681.                     "Menu_Tpl.Gen" to generate or change a menu screen
  682.                     template.  Menu prompt locations, menu prompts, etc. are
  683.                     setup in the template file and the menu subprogram then
  684.                     abides by that particular menu page screen template which
  685.                     you have defined.
  686.  
  687.                     Global constants, types, and variables specific to this
  688.                     subprogram are defined also within this file.
  689.  
  690.  
  691.    S_Input1.Inc     These two include files contain the scrolling input page
  692.    S_Input2.Inc     subprogram.  This subprogram controls the entering of data
  693.                     into the scrolling input pages.  This subprogram will
  694.                     support as many scrolling input pages as you require.
  695.                     Notice that there are 4 scrolling input pages in the
  696.                     example application of the input pre-processor: uniform
  697.                     beam loading, concentrated beam loading, prismatic beam
  698.                     loading, and applied moments to a beam.
  699.  
  700.                     Notice that the routines within this subprogram allow many
  701.                     more entry rows and entry columns to be displayed within
  702.                     the scrolling input window than can actually physically
  703.                     fit.  It does this by scrolling the rows up and down and
  704.                     the columns left and right within the scroll window.  Thus
  705.                     the scrolling input window acts much like a view port onto
  706.                     a spreadsheet.
  707.  
  708.                     Column headings (or prompts) are easily added, deleted, or
  709.                     altered using "S_I_Tpl.Gen" to generate or change a column
  710.                     heading template file.  Input data type definitions for
  711.                     each particular scroll column are also defined in the
  712.                     column heading template.
  713.  
  714.                     The size and/or placement of the scrolling input window can
  715.                     be easily changed.
  716.  
  717.                     This subprogram also checks the input data as it is entered
  718.                     by the user, sounding an error when characters of the wrong
  719.                     type are entered.
  720.  
  721.                     Global constants, types, and variables specific to this
  722.                     subprogram are defined within "S_Input1.Inc".
  723.  
  724.  
  725.  
  726.                                   Page 15
  727.  
  728.  
  729.  
  730.  
  731.    Screen.Inc       This include file is a subprogram (or library) of some
  732.                     very sophisticated screen I/O routines.  These routines
  733.                     vary from zooming a window onto the screen to taking a
  734.                     snapshot of the screen and storing it in the heap for later
  735.                     display.
  736.  
  737.                     Below is an alphabetical list of the functions and
  738.                     procedures contained in this subprogram include file.
  739.  
  740.                             Date1                     Date2
  741.                             DisplayScreenPage         DrawHorizWindowLine2
  742.                             DrawHorizWindowLine1      DrawWindow1
  743.                             DrawWindow2               HideBlinkingCursor
  744.                             InitTextScreenPointers    MonitorType
  745.                             ReadScreenPagesFromFile   RecallTextScreen
  746.                             SetCursorSize             ShowBlinkingCursor
  747.                             SoundAttention            SoundError
  748.                             SpeedPrint                SpeedPrint2
  749.                             StoreTextScreen           Time
  750.                             WaitUntilKeypressed       WriteCenterText
  751.                             WriteScreenPageToFile     ZoomWindow1
  752.                             ZoomWindow2
  753.  
  754.                     Note that some of these routines are not used in the pre-
  755.                     processor.  You can therefore reduce the size of your "Com"
  756.                     file by only including those routines within this include
  757.                     file that you are going to use in your program.
  758.  
  759.  
  760.    Tsipp1.Doc       The toolkit documentation files.
  761.    Tsipp2.Doc
  762.  
  763.  
  764.    Tsipp.Pas        This file should be the one you start compilation with.
  765.                     This is the main program file which makes all the include
  766.                     calls for the other subprogram files and the required
  767.                     forward references to later functions and procedures.  Some
  768.                     global constants, types, and variables are defined in this
  769.                     file.  "Tsipp" stands for "Turbo Screen Input Pre-
  770.                     Processor".
  771.  
  772.  
  773. These include files are modular in design.  Thus you should exclude those files
  774. from compilation that you do not need.  For example, if your particular
  775. application of this pre-processor does not require scrolling input windows,
  776. then do not include the files "S_Input1.Inc", "S_Input2.Inc", and
  777. "Display.Inc".
  778.  
  779.  
  780.  
  781.                                   Page 16
  782.  
  783.  
  784.  
  785.  
  786. VII. DESCRIPTION OF TOOLKIT UTILITY FILES
  787.  
  788.  
  789. Below is an alphabetical list of the pre-processor toolkit utility files you
  790. will find in this toolkit along with a short description on what each utility
  791. does.
  792.  
  793.  
  794.    File             Description
  795.    -----------      -----------------------------------------------------------
  796.  
  797.    G_I_Tpl.Frm      This is a template form that you can use to help plan out
  798.                     your general input page screen template.  It lists out all
  799.                     the items that need to be inserted into the template file
  800.                     in the proper format.  Simply print the template form out
  801.                     with your printer.  I recommend that you set your printer
  802.                     to print in compressed mode before printing out this file
  803.                     since the template form is 125 characters wide.
  804.  
  805.  
  806.    G_I_Tpl.Gen      This is a short program that is used to generate the
  807.                     general input page screen templates.  The general input
  808.                     page screen template stores all the data input descriptors
  809.                     and related information for a particular general input
  810.                     page.
  811.  
  812.  
  813.    Menu_Tpl.Frm     This is a template form that you can use to help plan a
  814.                     menu screen template.  It lists out all the items that
  815.                     need to be inserted into the template file in the proper
  816.                     format.  Simply print the template form out with your
  817.                     printer.  I recommend that you set your printer to print in
  818.                     compressed mode before printing out this file since the
  819.                     template form is 125 characters wide.
  820.  
  821.  
  822.    Menu_Tpl.Gen     This is a short program that is used to generate the menu
  823.                     screen templates.  The menu screen template stores all the
  824.                     menu prompts and related data for a particular menu page.
  825.  
  826.  
  827.    S_I_Tpl.Frm      This is a template form that you can use to help plan out
  828.                     your scrolling input page column heading template.  It
  829.                     lists out all the items that need to be inserted into the
  830.                     template file in the proper format to display individual
  831.                     column headings.  Simply print the template form out with
  832.                     your printer.  I recommend that you set your printer to
  833.                     print in compressed mode before printing out this file
  834.                     since the template form is 125 characters wide.
  835.  
  836.  
  837.  
  838.                                   Page 17
  839.  
  840.  
  841.  
  842.  
  843.    S_I_Tpl.Gen      This is a short program that is used to generate the
  844.                     scrolling input column heading template file for all the
  845.                     scrolling input windows.
  846.  
  847.                     Notice that only one scrolling input column heading
  848.                     template file is required to store the required information
  849.                     for as many scrolling input pages as you require, while all
  850.                     the other templates (i.e. General Input, Menu) are for only
  851.                     one specific page.
  852.  
  853.  
  854.  
  855.  
  856. VIII. DESCRIPTION OF FILES USED IN THE EXAMPLE APPLICATION
  857.  
  858.  
  859. Below is an alphabetical list of the files used in the example application of
  860. the input pre-processor you will find in this toolkit along with a short
  861. description on what each file is.
  862.  
  863.  
  864.    File             Description
  865.    -----------      -----------------------------------------------------------
  866.  
  867.    Example.Com      A compiled and ready to run example application using the
  868.                     turbo screen input pre-processor toolkit.  It has complete
  869.                     error checking and windows implemented.
  870.  
  871.  
  872.    G_I_01.Col       A color screen file for general input page 1 in the
  873.                     example application program.
  874.  
  875.  
  876.    G_I_01.Mon       A monochrome screen file for general input page 1 in the
  877.                     example application program.
  878.  
  879.  
  880.    G_I_01.Tpl       This is a general input page screen template file that I
  881.                     generated using the "G_I_Tpl.Gen" to give an example on how
  882.                     the input pre-processor works.
  883.  
  884.  
  885.    Menu_01.Col      A color screen file for menu page 1 for the example
  886.                     application program.
  887.  
  888.  
  889.  
  890.                                   Page 18
  891.  
  892.  
  893.  
  894.  
  895.    Menu_01.Mon      A monochrome screen file for menu page 1 in the
  896.                     example application program.
  897.  
  898.  
  899.    Menu_01.Tpl      This is a menu screen template file that I generated using
  900.                     the "Menu_Tpl.Gen" to give an example on how the input
  901.                     pre-processor works.
  902.  
  903.  
  904.    S_I_01.Col       A color screen file for scrolling input page 1 in the
  905.                     example application program.
  906.  
  907.  
  908.    S_I_02.Col       A color screen file for scrolling input page 2 in the
  909.                     example application program.
  910.  
  911.  
  912.    S_I_03.Col       A color screen file for scrolling input page 3 in the
  913.                     example application program.
  914.  
  915.  
  916.    S_I_04.Col       A color screen file for scrolling input page 4 in the
  917.                     example application program.
  918.  
  919.  
  920.    S_I_01.Mon       A monochrome screen file for scrolling input page 1 in
  921.                     the example application program.
  922.  
  923.  
  924.    S_I_02.Mon       A monochrome screen file for scrolling input page 2 in the
  925.                     example application program.
  926.  
  927.  
  928.    S_I_03.Mon       A monochrome screen file for scrolling input page 3 in
  929.                     the example application program.
  930.  
  931.  
  932.    S_I_04.Mon       A monochrome screen file for scrolling input page 4 in the
  933.                     example application program.
  934.  
  935.  
  936.    S_Input.Tpl      This is a scrolling input page column prompt template that
  937.                     I generated using the "S_I_Tpl.Gen" to give an example on
  938.                     how the input pre-processor works.  Notice that this one
  939.                     template file stores the required information for as many
  940.                     scrolling input pages as you require, while all the other
  941.                     templates are for only one specific page.
  942.  
  943.  
  944.  
  945.                                   Page 19
  946.  
  947.  
  948.  
  949.  
  950.    Test1.Inp        A sample input data file for the above example application.
  951.  
  952.  
  953.    Test2.Inp        A sample input data file for the above example application.
  954.  
  955.  
  956. Now let me explain a little more on the specifics of how the Turbo Screen
  957. Input Pre-processor works and what you need to know to easily alter it for your
  958. own application.
  959.  
  960.  
  961.  
  962.  
  963. IX. PROGRAM CONTROL
  964.  
  965.  
  966. During execution of the input pre-processor program control is passed between
  967. three subprograms--general input, menu, and scrolling input.  For the input
  968. pre-processor main program to know which input subprogram currently has
  969. control, the enumerated page control variable CurrentPage is used.
  970.  
  971.  
  972.     Type
  973.  
  974.         PageType=(Menu,G_I,S_I,Exit);
  975.         { Enumerated data type used to tell the main program which    }
  976.         { of the below page type subprograms is currently in          }
  977.         { control:                                                    }
  978.         {      Menu Subprogram                                        }
  979.         {      General Input Subprogram                               }
  980.         {      Scrolling Input Subprogram                             }
  981.         {      Exit back to the operating system                      }
  982.  
  983.  
  984.     Var
  985.  
  986.         CurrentPage:PageType;
  987.         { A variable used to tell the main program what               }
  988.         { input page subprogram is currently in control.              }
  989.